ALV-Grid-Erweiterung “Langtext”

Heute war Tag der Ablenkung. Nachdem ich in der CL_GUI_ALV_GRID-Klasse etwas herum experimentiert hatte, bin ich nun auch noch über eine Ableitung dieser Klasse mit der Erweiterung Automatische Langtextermittlung gestoßen: Die Klasse heißt CL_ALV_GRID_XT, das zugehörige Demoprogramm lautet R_ALV_GRID_XT.

Um zu verstehen, was SAP in diesem Fall mit Langtext meint, habe ich eine abgespeckte Demoversion geschrieben. In diesem Programm wird die Tabelle TVKO, die die Definition der Verkaufsorganisationen enthält. Mit der automatischen Langtextermittlung  können Felder definiert werden, die entweder einen beschreibenden Text in einer zugehörigen Customizingtabelle haben, oder bei dem die Werte als Festwerte in der Domäne hinterlegt sind.

Der Parameter KEEP = X bewirkt, dass das Schlüsselfeld angezeigt wird. Bei KEEP = space wird das Feld automatisch ausgeblendet und es wird nur das Feld mit dem Langtext angezeigt.

[notice type = ‘info’]Zusätzlich gibt es die Option Ausgabe optimieren. Wird diese Option aktiviert, dann werden bei der Ausgabe alle komplett leeren Spalten ausgeblendet. Ein nettes Feature![/notice]

Beschreibung

Das Demoprogramm liest die Tabelle TVKO. Die Beschreibung der Verkaufsorganisationen stehen in der Texttabelle TVKOT. Um diese in einem ALV anzuzeigen müsste man entweder einen View bemühen oder die Texte aus der Tabelle manuell nachlesen. Diese Arbeit nimmt uns die Option Automatische Langtextermittlung ab. Um nicht extra eine neue Tabelle bzw. einen Feldkatalog aufbauen zu müssen, verwende ich vorhandene Felder, in die die Langtexte geschrieben werden. Der Name der VKORG kommt in das Feld TXNAM_KOP, der zugehörige Festwert zum Feld BSTYP ins Feld TXNAM_SDB.

Bild_2014_06_13_200629

Coding

REPORT.

PARAMETER p_optim  TYPE xfeld DEFAULT 'X'.
PARAMETER p_ltxt   TYPE xfeld DEFAULT 'X'.
PARAMETER p_keep   TYPE xfeld DEFAULT 'X'.


DATA gt_autotext   TYPE alv_auto_text_t.
DATA gt_data       TYPE STANDARD TABLE OF tvko.
DATA gr_alv        TYPE REF TO cl_alv_grid_xt.
DATA gr_container  TYPE REF TO cl_gui_custom_container.


START-OF-SELECTION.
  PERFORM start_of_selection.

*---------------------------------------------------------------------*
*       Form  start_of_selection
*---------------------------------------------------------------------*
*       Start program execution
*---------------------------------------------------------------------*
FORM start_of_selection.

  PERFORM get_data.

  IF p_ltxt IS NOT INITIAL.
    PERFORM prep_auto_text.
  ENDIF.

  CALL SCREEN 100.

ENDFORM.                    "start_of_selection

*&---------------------------------------------------------------------*
*&      Form  prep_auto_text
*&---------------------------------------------------------------------*
FORM prep_auto_text.

  DATA ls_autotext LIKE LINE OF gt_autotext.

  ls_autotext-keep_fieldname_visible = p_keep.
  ls_autotext-fieldname              = 'VKORG'.
  ls_autotext-fieldname_longtext     = 'TXNAM_KOP'.
  INSERT ls_autotext INTO TABLE gt_autotext.

  ls_autotext-keep_fieldname_visible = p_keep.
  ls_autotext-fieldname              = 'BSTYP'.
  ls_autotext-fieldname_longtext     = 'TXNAM_SDB'.
  INSERT ls_autotext INTO TABLE gt_autotext.

ENDFORM.                    "prep_auto_text
*---------------------------------------------------------------------*
*       Form  get_data
*---------------------------------------------------------------------*
*       Select application data (here SFLIGHT)
*---------------------------------------------------------------------*
FORM get_data.

  FIELD-SYMBOLS <data> LIKE LINE OF gt_data.

*== read all sales organizations
  SELECT * FROM tvko INTO TABLE gt_data.

*== clear fields that shall contain the long text
  LOOP AT gt_data ASSIGNING .
    CLEAR <data>-txnam_kop.
    CLEAR <data>-txnam_sdb.
  ENDLOOP.

ENDFORM.                    "get_data

*----------------------------------------------------------------------*
*       Module  d0100_init  OUTPUT
*----------------------------------------------------------------------*
*       Initialize ALV Grid screen
*----------------------------------------------------------------------*
MODULE d0100_init OUTPUT.

  SET: PF-STATUS '100',
       TITLEBAR  '100'.

  CHECK gr_container IS INITIAL.


*== Create ALV container
  CREATE OBJECT gr_container
    EXPORTING
      container_name = 'ALV_GRID'.

*== Create ALV grid
  CREATE OBJECT gr_alv
    EXPORTING
      i_parent          = gr_container
      i_optimize_output = p_optim
      it_auto_text_det  = gt_autotext.


* Display ALV data
  CALL METHOD gr_alv->set_table_for_first_display
    EXPORTING
      i_save                        = 'A'
      i_structure_name              = 'TVKO'
    CHANGING
      it_outtab                     = gt_data
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

ENDMODULE.                 " d0100_init  OUTPUT

*----------------------------------------------------------------------*
*       Module  d0100_exit  INPUT
*----------------------------------------------------------------------*
MODULE d0100_exit INPUT.

  CALL METHOD: gr_alv->free,
               gr_container->free.

  LEAVE TO SCREEN 0.
ENDMODULE.                 " d0100_exit  INPUT

Dynpro

Das Dynpro 100 muss angelegt werden und der GUI-Status “100” ebenfalls. Das PAI-Modul anzupassen, so dass es funktioniert, sollte ein Kinderspiel sein.

[notice type=’info’]Der SAP-Demoreport bietet noch eine Funktionalität mit BAdI BADI_ALV_GRID_XT (Transaktion SE18). Diese werde ich mir evtl. demnächst noch einmal anschauen und berichten. Die Dokumentation verspricht einiges: “Es ist Ihnen mit Hilfe dieser Daten möglich, kundeneigene Felder im Grid zu füllen, den Feldkatalog zu ändern und sich auf Events des Grid
Controls zu registrieren, z.B. TOOLBAR oder USER_COMMAND.[/notice]

 

 

Enno Wulff

COMMENTS

  • <cite class="fn">anjinsan</cite>

    Danke Enno,
    genau das was ich gerade gesucht habe! Ins ALVGrid soll das 3 stellige Feld S_CARR_ID rein. Aber der Wert ‘LH ‘ soll im Grid als ‘Lufthansa’ ausgegeben werden! Damit brauche ich für den String ‘Lufthansa’ nicht ein eigenes Datenelement anlegen!
    LG Michael (Januar 2016)

Comments are closed.